/**
 * API模块基础使用示例
 * 展示如何使用API模块进行常见的数据操作
 */

import { 
  projectService, 
  productService, 
  taskService,
  apiClient 
} from '../index.js';

// ==================== 项目管理示例 ====================

/**
 * 项目管理基础操作示例
 */
export async function projectManagementExamples() {
  console.log('=== 项目管理示例 ===');

  try {
    // 1. 获取项目列表
    console.log('1. 获取项目列表...');
    const projects = await projectService.getProjects({
      page: 1,
      pageSize: 10,
      search: '电商平台',
      status: 'active'
    });
    console.log('项目列表:', projects);

    // 2. 创建新项目
    console.log('2. 创建新项目...');
    const newProject = await projectService.createProject({
      project_name: '电商平台开发项目',
      project_type: 'web',
      priority: 'high',
      manager_id: 'user_001',
      start_date: '2024-01-01',
      end_date: '2024-06-30',
      budget: 500000,
      description: '开发一个完整的电商平台',
      objectives: '提供完整的购物体验',
      risk_level: 'medium',
      team_members: ['user_002', 'user_003']
    });
    console.log('创建的项目:', newProject);

    // 3. 获取项目详情
    console.log('3. 获取项目详情...');
    const projectDetail = await projectService.getProject(newProject.id);
    console.log('项目详情:', projectDetail);

    // 4. 更新项目状态
    console.log('4. 更新项目状态...');
    await projectService.updateProjectStatus(newProject.id, 'in_progress', '项目已启动');

    // 5. 更新项目进度
    console.log('5. 更新项目进度...');
    await projectService.updateProjectProgress(newProject.id, 25);

    // 6. 获取项目统计
    console.log('6. 获取项目统计...');
    const stats = await projectService.getProjectStats({
      startDate: '2024-01-01',
      endDate: '2024-12-31'
    });
    console.log('项目统计:', stats);

  } catch (error) {
    console.error('项目管理示例错误:', error);
  }
}

// ==================== 商品管理示例 ====================

/**
 * 商品管理基础操作示例
 */
export async function productManagementExamples() {
  console.log('=== 商品管理示例 ===');

  try {
    // 1. 获取商品列表
    console.log('1. 获取商品列表...');
    const products = await productService.getProducts({
      page: 1,
      pageSize: 20,
      search: '手机',
      categoryId: 'cat_001',
      status: 'active',
      minPrice: 1000,
      maxPrice: 10000
    });
    console.log('商品列表:', products);

    // 2. 创建新商品
    console.log('2. 创建新商品...');
    const newProduct = await productService.createProduct({
      name: 'iPhone 15 Pro Max',
      price: 9999,
      original_price: 10999,
      description: '苹果最新款旗舰手机',
      category_id: 'cat_001',
      stock: 50,
      tags: ['手机', '苹果', '5G', '旗舰'],
      status: 'active',
      images: [],
      specifications: {
        '屏幕尺寸': '6.7英寸',
        '存储容量': '256GB',
        '颜色': '深空黑色'
      }
    });
    console.log('创建的商品:', newProduct);

    // 3. 获取商品详情
    console.log('3. 获取商品详情...');
    const productDetail = await productService.getProduct(newProduct.id);
    console.log('商品详情:', productDetail);

    // 4. 更新商品价格
    console.log('4. 更新商品价格...');
    await productService.updateProduct(newProduct.id, {
      price: 9499,
      original_price: 10499
    });

    // 5. 更新商品库存
    console.log('5. 更新商品库存...');
    await productService.updateProductStock(newProduct.id, 30, 'set');

    // 6. 获取商品分类
    console.log('6. 获取商品分类...');
    const categories = await productService.getCategories();
    console.log('商品分类:', categories);

    // 7. 获取热门商品
    console.log('7. 获取热门商品...');
    const popularProducts = await productService.getPopularProducts({
      limit: 10,
      period: 'week'
    });
    console.log('热门商品:', popularProducts);

  } catch (error) {
    console.error('商品管理示例错误:', error);
  }
}

// ==================== 任务管理示例 ====================

/**
 * 任务管理基础操作示例
 */
export async function taskManagementExamples() {
  console.log('=== 任务管理示例 ===');

  try {
    // 1. 获取任务列表
    console.log('1. 获取任务列表...');
    const tasks = await taskService.getTasks({
      page: 1,
      pageSize: 20,
      projectId: 'proj_001',
      status: 'pending',
      priority: 'high'
    });
    console.log('任务列表:', tasks);

    // 2. 创建新任务
    console.log('2. 创建新任务...');
    const newTask = await taskService.createTask({
      task_name: '设计用户登录页面',
      description: '设计一个现代化的用户登录界面',
      project_id: 'proj_001',
      assignee_id: 'user_002',
      participants: ['user_003', 'user_004'],
      start_date: '2024-01-15',
      end_date: '2024-01-25',
      estimated_hours: 40,
      priority: 'high',
      predecessor_tasks: []
    });
    console.log('创建的任务:', newTask);

    // 3. 获取任务详情
    console.log('3. 获取任务详情...');
    const taskDetail = await taskService.getTask(newTask.id);
    console.log('任务详情:', taskDetail);

    // 4. 更新任务状态
    console.log('4. 更新任务状态...');
    await taskService.updateTaskStatus(newTask.id, 'in_progress', '开始设计工作');

    // 5. 更新任务进度
    console.log('5. 更新任务进度...');
    await taskService.updateTaskProgress(newTask.id, 50, '已完成界面设计');

    // 6. 更新任务工时
    console.log('6. 更新任务工时...');
    await taskService.updateTaskHours(newTask.id, 20, '已完成20小时的设计工作');

    // 7. 分配任务
    console.log('7. 分配任务...');
    await taskService.assignTask(newTask.id, 'user_005', ['user_006']);

    // 8. 获取任务甘特图数据
    console.log('8. 获取任务甘特图数据...');
    const ganttData = await taskService.getTaskGanttData('proj_001');
    console.log('甘特图数据:', ganttData);

  } catch (error) {
    console.error('任务管理示例错误:', error);
  }
}

// ==================== 文件上传示例 ====================

/**
 * 文件上传示例
 */
export async function fileUploadExamples() {
  console.log('=== 文件上传示例 ===');

  try {
    // 1. 上传商品图片
    console.log('1. 上传商品图片...');
    const fileInput = document.createElement('input');
    fileInput.type = 'file';
    fileInput.accept = 'image/*';
    fileInput.multiple = true;
    
    // 模拟文件选择
    const mockFile = new File(['mock image data'], 'test.jpg', { type: 'image/jpeg' });
    const fileList = [mockFile];
    
    const uploadResult = await productService.uploadProductImages('prod_001', fileList);
    console.log('上传结果:', uploadResult);

    // 2. 上传项目文件
    console.log('2. 上传项目文件...');
    const projectFile = new File(['project document'], 'project-doc.pdf', { type: 'application/pdf' });
    const projectUploadResult = await projectService.uploadProjectFiles('proj_001', [projectFile]);
    console.log('项目文件上传结果:', projectUploadResult);

  } catch (error) {
    console.error('文件上传示例错误:', error);
  }
}

// ==================== 批量操作示例 ====================

/**
 * 批量操作示例
 */
export async function batchOperationExamples() {
  console.log('=== 批量操作示例 ===');

  try {
    // 1. 批量删除项目
    console.log('1. 批量删除项目...');
    const projectIds = ['proj_001', 'proj_002', 'proj_003'];
    const deleteResult = await projectService.batchDeleteProjects(projectIds);
    console.log('批量删除结果:', deleteResult);

    // 2. 批量更新商品状态
    console.log('2. 批量更新商品状态...');
    const productIds = ['prod_001', 'prod_002', 'prod_003'];
    const updateResult = await productService.batchUpdateProductStatus(productIds, 'inactive');
    console.log('批量更新结果:', updateResult);

    // 3. 批量更新任务状态
    console.log('3. 批量更新任务状态...');
    const taskIds = ['task_001', 'task_002', 'task_003'];
    const taskUpdateResult = await taskService.batchUpdateTaskStatus(taskIds, 'completed');
    console.log('批量更新任务结果:', taskUpdateResult);

  } catch (error) {
    console.error('批量操作示例错误:', error);
  }
}

// ==================== 搜索和统计示例 ====================

/**
 * 搜索和统计示例
 */
export async function searchAndStatsExamples() {
  console.log('=== 搜索和统计示例 ===');

  try {
    // 1. 搜索项目
    console.log('1. 搜索项目...');
    const searchResults = await projectService.search('电商平台', {
      status: 'active',
      type: 'web'
    });
    console.log('搜索结果:', searchResults);

    // 2. 获取项目统计
    console.log('2. 获取项目统计...');
    const projectStats = await projectService.getProjectStats({
      startDate: '2024-01-01',
      endDate: '2024-12-31'
    });
    console.log('项目统计:', projectStats);

    // 3. 获取商品统计
    console.log('3. 获取商品统计...');
    const productStats = await productService.getProductStats({
      categoryId: 'cat_001',
      status: 'active'
    });
    console.log('商品统计:', productStats);

    // 4. 获取任务统计
    console.log('4. 获取任务统计...');
    const taskStats = await taskService.getTaskStats({
      projectId: 'proj_001',
      startDate: '2024-01-01',
      endDate: '2024-12-31'
    });
    console.log('任务统计:', taskStats);

  } catch (error) {
    console.error('搜索和统计示例错误:', error);
  }
}

// ==================== 错误处理示例 ====================

/**
 * 错误处理示例
 */
export async function errorHandlingExamples() {
  console.log('=== 错误处理示例 ===');

  try {
    // 1. 处理不存在的资源
    console.log('1. 尝试获取不存在的项目...');
    try {
      await projectService.getProject('non-existent-id');
    } catch (error) {
      console.log('预期的错误:', error.message);
    }

    // 2. 处理验证错误
    console.log('2. 尝试创建无效的商品...');
    try {
      await productService.createProduct({
        // 缺少必需字段
        name: '',
        price: -100
      });
    } catch (error) {
      console.log('验证错误:', error.message);
    }

    // 3. 处理网络错误
    console.log('3. 模拟网络错误...');
    try {
      // 临时修改baseURL来模拟网络错误
      const originalBaseURL = apiClient.baseURL;
      apiClient.baseURL = 'http://invalid-url.com/api';
      
      await projectService.getProjects();
    } catch (error) {
      console.log('网络错误:', error.message);
      
      // 恢复原始URL
      apiClient.baseURL = originalBaseURL;
    }

  } catch (error) {
    console.error('错误处理示例错误:', error);
  }
}

// ==================== 运行所有示例 ====================

/**
 * 运行所有示例
 */
export async function runAllExamples() {
  console.log('开始运行API模块示例...');
  
  try {
    await projectManagementExamples();
    await productManagementExamples();
    await taskManagementExamples();
    await fileUploadExamples();
    await batchOperationExamples();
    await searchAndStatsExamples();
    await errorHandlingExamples();
    
    console.log('所有示例运行完成！');
  } catch (error) {
    console.error('运行示例时发生错误:', error);
  }
}

// 如果直接运行此文件，执行所有示例
if (typeof window !== 'undefined') {
  // 在浏览器环境中，可以通过控制台调用
  window.apiExamples = {
    runAll: runAllExamples,
    projects: projectManagementExamples,
    products: productManagementExamples,
    tasks: taskManagementExamples,
    upload: fileUploadExamples,
    batch: batchOperationExamples,
    search: searchAndStatsExamples,
    errors: errorHandlingExamples
  };
  
  console.log('API示例已加载，可以通过以下方式调用:');
  console.log('window.apiExamples.runAll() - 运行所有示例');
  console.log('window.apiExamples.projects() - 运行项目管理示例');
  console.log('window.apiExamples.products() - 运行商品管理示例');
  console.log('window.apiExamples.tasks() - 运行任务管理示例');
}
